﻿using System;
using Comun;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.Common;

namespace Comun
{
	public class Conexion :Base
	{
        private String sXMLConfig;
        private string MotorDatos;
        private bool bDatosAppConfig;
        private ConexionSqlServer connSqlServer;

		public Conexion()
		{
            bDatosAppConfig = false;            			
		}

        public Conexion(string XMLConfig)
        {
            bDatosAppConfig = false;
            sXMLConfig = XMLConfig;
            this.Errores = new Errores();
        }

        private String GetStringConexion(String sClave)
        {

            DataSet ds = new DataSet();
            DataTable Tabla;
            sXMLConfig = @"C:\DESARROLLO\SAHC\Guada\Config.xml";

            ds.ReadXml(sXMLConfig);

            Tabla = ds.Tables["Conexion"];

            if (Tabla == null)
                return "";
            else
                return Tabla.Rows[0]["MOTOR"].ToString();

        }

		//CONEXION A LA BASE
		public void Conectar()
		{
            try
            {
                this.Errores.Resetear();
                if (bDatosAppConfig)
                    MotorDatos = ConfigurationSettings.AppSettings["MotorDatos"].ToString().ToUpper();
                else
                    MotorDatos = GetStringConexion("MotorDatos").ToUpper();

                if (MotorDatos == ConstBD.MOTORSQLSERVER)
                {
                    if (bDatosAppConfig)
                        connSqlServer = new ConexionSqlServer();
                    else
                        connSqlServer = new ConexionSqlServer(sXMLConfig);

                    connSqlServer.Conectar();
                    this.Errores = connSqlServer.Errores;
                }
            }
            catch (Exception e)
            {
                return;
            }
		}

		//COMIENZO DE LA TRANSACCION
		public void ComienzoTransaccion()
		{

            if (MotorDatos == ConstBD.MOTORSQLSERVER)
            {
                connSqlServer.ComienzoTransaccion();
                this.Errores = connSqlServer.Errores;
            }
		}

		//COMMIT DE LA TRANSACCION
		public void CommitTransaccion()
		{
            if (MotorDatos == ConstBD.MOTORSQLSERVER)
            {
                connSqlServer.CommitTransaccion();
                this.Errores = connSqlServer.Errores;
            }		
		}

		//ROLLBACK DE LA TRANSACCION
		public void RollbackTransaccion()
		{
            if (MotorDatos == ConstBD.MOTORSQLSERVER)
            {
                connSqlServer.RollbackTransaccion();
                this.Errores = connSqlServer.Errores;
            }
		}

		//DESCONECCION DE LA BASE
		public void Desconectar()
		{
            if (MotorDatos == ConstBD.MOTORSQLSERVER)
            {
                connSqlServer.Desconectar();
                this.Errores = connSqlServer.Errores;
            }
        }

		//Ejecuta un Query que no retorna Filas (INSERT,UPDATE,DELETE)
		public int EjecutarQuery(String sQuery)
		{
            int nRet = 0;

            if (MotorDatos == ConstBD.MOTORSQLSERVER)
            {
                nRet = connSqlServer.EjecutarQuery(sQuery);
                this.Errores = connSqlServer.Errores;
            }

            return nRet;
		}

		//Ejecuta un Query que retorna Filas 		
		public DataSet EjecutarQuery(String sQuery, String sTabla)
		{
            DataSet Ds = new DataSet();

            if (MotorDatos == ConstBD.MOTORSQLSERVER)
            {
                Ds = connSqlServer.EjecutarQuery(sQuery, sTabla);
                this.Errores = connSqlServer.Errores;
            }
            return Ds;

		}

		//Ejecuta un Query que retorna un Valor	
		public int EjecutarScalar(String sQuery)
		{
            int nRet = 0;

            if (MotorDatos == ConstBD.MOTORSQLSERVER)
            {
                nRet = connSqlServer.EjecutarScalar(sQuery);
                this.Errores = connSqlServer.Errores;
            }

            return nRet;
		}

	}

    public class ConstBD
    {
        public const string MOTORSQLSERVER = "SQLSERVER";

    }
}
        
